An image processor must be able to satisfactorily transform images, prepared for rendering on a staggeringly large number of source devices, for rendering on an equally large number of rendering devices. For example, a personal computer, configured to operate as an image processor, through the use of, for example, a web browser, word processor, or desktop publishing software, must be able to accept images created or downloaded from almost anywhere, and render the images pleasingly on any image output terminal the user connects to the personal computer. The image processor must be able to pleasingly display images on a computer screen and send commands to have images rendered pleasingly on any printer the user connects to the personal computer. Similarly, document processors and copiers must transform images pleasingly and accurately. Indeed, in document processors and copiers, color accuracy requirements can be very stringent.
Typically transformations are carried using lookup tables. For example, an image prepared for rendering in a RGB color space of a computer monitor, is transformed into a CMYK color space of a printer, using a three-dimensional lookup table. Each of the RGB parameters is used as an axis or index into the lookup table. The RGB parameters are typically represented by 8-bit values for each of the R, G, and B components. Such a 24-bit RGB vector is capable of addressing over 16.77 million locations or describing over 16.77 million colors. However, lookup tables of this size are physically impractical in most cases. Therefore, such lookup tables are typically partitioned into a smaller size, such as, for example, 16×16×16 (4096) table locations or LUT nodes. Each LUT node stores, for example, a CMYK value. CMYK values of points not directly represented by nodes, are determined by a form of interpolation among nodes of the lookup table (LUT). Such rendering LUTs are used in PostScript and ICC image paths to find the colorant values needed to render desired input colors. The location of the nodes has generally been determined based on function curvature. In many approaches, addressing the appropriate nodes and interpolating between them has been difficult. Further, it has been found that the biggest errors in a rendering LUT (LAB to CMYK, for example) are for colors near the boundary of the gamut in the input space of the LUT.
Accordingly, what is needed in this art are increasingly sophisticated systems and methods for generating a hierarchical multidimensional rendering lookup table (LUT) that increases the sampling density in the nodes that are cut by the gamut boundary.